package com.hc.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.env.Profiles;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;

/**
 *
 * EnableSwagger2注解是开启的功能
 *
 * @author hs
 * @date 2021/05/06
 */
@Configuration
@EnableSwagger2
public class SwaggerConfig {

    /**
     * 配置Swagger的Docket的Bean实例 就是用Docket对象接管它原来的配置
     */
    @Bean
    public Docket getDocket(Environment environment){

        //如果我想要开发环境swagger生效 但是发布环境swagger就失效如何解决
        //首先需要获取当前项目的环境
        //这个功能需要使用Environment对象 在该方法的形参中加一个  org.springframework.core.env.Environment
        //acceptsProfiles()这个方法又需要一个参数 org.springframework.core.env.Profiles  of()方法中就是写多文档环境的
        Profiles profiles = Profiles.of("dev","test");
        //通过environment.acceptsProfiles()判断当前是否处于我们设定的环境当中
        boolean isDiv = environment.acceptsProfiles(profiles);


        return new Docket(DocumentationType.SWAGGER_2)
                //因为这个方法需要一个ApiInfo对象，点进源码 我们创建一个该对象
                .apiInfo(getapiInfo())
                //这是是否开启swagger  默认是true  改为false就关闭了
                .enable(isDiv)
                // 分组名
                .groupName("胡尚")
                .select()
                //RequestHandlerSelectors 它是配置要扫描接口的方式
                // basePackage()：指定要扫描的包  也是最常用的
                .apis(RequestHandlerSelectors.basePackage("com.hc.controller"))
                //过滤什么路径，就是只扫描user路径下的，
//                .paths(PathSelectors.ant("/user/**"))
                .build();
    }

    @Bean
    public Docket getDocket1(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("AA");
    }

    @Bean
    public Docket getDocket2(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("BB");
    }

    @Bean
    public Docket getDocket3(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("CC");
    }

    /**
     * 配置swagger信息的apiInfo对象
     * @return apiInfo对象
     */
    public ApiInfo getapiInfo(){

        //作者信息
        Contact contact = new Contact("胡尚", "https://blog.kuangstudy.com/", "1257304475@qq.com");

        return new ApiInfo(
                "这是一个标题，胡尚的swagger",
                "这是一个描述，加油",
                "1.0",
                //这下面的是一个url，可以随便写一个
                "https://blog.kuangstudy.com/",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList()
        );
    }




}
